/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package occho.data;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import occho.model.Asignatura;
import occho.model.Pregunta;
import occho.model.Tema;

/**
 *
 * @author Jorge
 */
public class OracleTemaDAO implements TemaDAO {

    private Connection conn = null;

    /**
     * Constructor de la clase
     * @param conn
     * @throws ClassNotFoundException
     * @throws SQLException
     */
    public OracleTemaDAO(Connection conn) throws ClassNotFoundException, SQLException {
        this.conn =conn;
    }

    @Override
    public boolean insertarTema(Tema tema, Asignatura asig) throws SQLException {
        PreparedStatement stmt = conn.prepareStatement("insert into tema (idtema, nombre, idasignatura) values (seq_tema.nextval, ?, ?)");
        stmt.clearParameters();
        stmt.setString(1, tema.getNombre());
        stmt.setInt(2, asig.getIdAsignatura());
        if (stmt.executeUpdate() > 0) {
            stmt.close();
            return true;
        } else {
            stmt.close();
            return false;
        }

    }

    @Override
    public boolean borrarTema(Tema tema) throws SQLException {
        PreparedStatement stmt = conn.prepareStatement("delete from tema where idTema = ?");
        stmt.clearParameters();
        stmt.setInt(1, tema.getIdTema());
        if (stmt.executeUpdate() > 0) {
            stmt.close();
            return true;
        } else {
            stmt.close();
            return false;
        }
    }

    @Override
    public Tema seleccionarTema(Tema tema) throws SQLException, ClassNotFoundException {
        Tema t = null;
        PreparedStatement stmt = conn.prepareStatement("select * from tema where idtema = ?");
        stmt.clearParameters();
        stmt.setInt(1, tema.getIdTema());
        ResultSet rs = stmt.executeQuery();
        if (rs.next()) {
            OracleDAOFactory daoFactory = OracleDAOFactory.getInstancia();
            PreguntaDAO preguntaDAO = daoFactory.getPreguntaDAO();
            List<Pregunta> preguntas = preguntaDAO.seleccionarPreguntas(tema);
            t = new Tema(rs.getInt("idTema"), rs.getString("nombre"), preguntas);
        }
        rs.close();
        stmt.close();
        return t;
    }

    @Override
    public List<Tema> seleccionarTemas() throws SQLException, ClassNotFoundException {
        OracleDAOFactory daoFactory = OracleDAOFactory.getInstancia();
        PreguntaDAO preguntaDAO = daoFactory.getPreguntaDAO();
        PreparedStatement stmt = conn.prepareStatement("select * from tema");
        stmt.clearParameters();
        ResultSet rs = stmt.executeQuery();
        List<Tema> temas = new ArrayList<Tema>();
        while (rs.next()) {
            Tema tema = new Tema();
            int id = rs.getInt("idTema");
            String nombre = rs.getString("nombre");
            tema.setIdTema(id);
            temas.add(new Tema(id, nombre, preguntaDAO.seleccionarPreguntas(tema)));
        }
        rs.close();
        stmt.close();
        return temas;
    }

    @Override
    public List<Tema> seleccionarTemas(Asignatura asig) throws SQLException, ClassNotFoundException {
        OracleDAOFactory daoFactory = OracleDAOFactory.getInstancia();
        PreguntaDAO preguntaDAO = daoFactory.getPreguntaDAO();
        PreparedStatement stmt = conn.prepareStatement("select * from tema where idAsignatura = ?");
        stmt.clearParameters();
        stmt.setInt(1, asig.getIdAsignatura());
        ResultSet rs = stmt.executeQuery();
        List<Tema> temas = new ArrayList<Tema>();
        while (rs.next()) {
            Tema tema = new Tema();
            int id = rs.getInt("idTema");
            String nombre = rs.getString("nombre");
            tema.setIdTema(id);
            temas.add(new Tema(id, nombre, preguntaDAO.seleccionarPreguntas(tema)));
        }
        rs.close();
        stmt.close();
        return temas;
    }

   
}
